home *** CD-ROM | disk | FTP | other *** search
/ PCMania 48 / PCMania CD48_1.iso / pcmania / dscene48 / ejemplo3.pas < prev   
Pascal/Delphi Source File  |  1996-07-07  |  2KB  |  74 lines

  1.         PROGRAM mueve_un_cuadrado_por_pantalla_con_pantalla_virtual;
  2.  
  3.         Uses Dos, Crt;
  4.  
  5.         Procedure ModeSet(Mode : Byte); ASSEMBLER;
  6.         ASM
  7.            mov    ah,0
  8.            mov    al,[Mode]
  9.            int    10h
  10.         END;
  11.  
  12.         Procedure Borra_Pantalla(Segmento : Word);
  13.         Begin
  14.              FillChar(Ptr(Segmento,0)^, 64000, 0);
  15.         End;
  16.  
  17.         Procedure Pon_Cuadrado(X,Y,Segmento  : Word);
  18.         VAR
  19.            iX, iY       : Word;
  20.  
  21.         Begin
  22.              For iY := Y to Y+10 do
  23.              Begin
  24.                   For iX := X to X+10 do Mem[Segmento:(320*iY)+iX] := 9;
  25.              End;
  26.         End;
  27.  
  28.         VAR
  29.            X            : Word;
  30.            Y            : Real;
  31.            Radio        : Real;
  32.            Cont         : Real;
  33.            Virtual      : Pointer;
  34.  
  35.         Begin
  36.              ModeSet($13);
  37.  
  38.              GetMem(Virtual, 320*200);
  39.  
  40.              Y:=200; X:=0;
  41.              Cont := x;
  42.              Radio := 100;
  43.  
  44.              { Vista previa de la trayectória }
  45.  
  46.              While (X<320) AND (NOT KeyPressed) do
  47.              Begin
  48.                   Mem[$A000:(320*(round(Sin(Cont)*Radio)+100))+X] := 15;
  49.                   X:=X+1;
  50.                   Cont := Cont + 0.05;
  51.                   If Radio > 0 Then Radio := Radio - 0.3;
  52.              End;
  53.  
  54.              ReadLN;
  55.  
  56.              Y:=200; X:=0;
  57.              Cont := x;
  58.              Radio := 100;
  59.  
  60.              While (X<320) AND (NOT KeyPressed) do
  61.              Begin
  62.                   Borra_Pantalla(Seg(Virtual^));
  63.                   Pon_Cuadrado(X,(round(Sin(Cont)*Radio))+100,Seg(Virtual^));
  64.                   Move(Virtual^,Mem[$a000:0],64000);
  65.                   X:=X+1;
  66.                   Cont := Cont + 0.05;
  67.                   If Radio > 0 Then Radio := Radio - 0.3;
  68.              End;
  69.  
  70.              ModeSet(3);
  71.  
  72.              FreeMem(Virtual, 320*200);
  73.         End.
  74.